<?php

class Application_Model_Contadores extends Sgit_Model
{  
    protected $_name = 'contadores';
    protected $_primary = 'id';


    public function getContadores($values)
    {
        
        //permite pasar unico parametro id del contador
        if(is_numeric($values)){
            $id=$values;unset($values);$values['id']=$id;unset($id);
        } 
        
        $select=$this->getAdapter()
            ->select()
            ->from(array($this->_name))
            ->joinLeft('centros_continuidad', "centros_continuidad.id = {$this->_name}.id_cc", array('cc'=>'nombre'))
            ->joinLeft('salas', "salas.id = {$this->_name}.id_sala", array('sala'=>'nombre'));


        if (is_array($values['id']) || is_numeric($values['id']))
            $select->where("{$this->_name}.id IN (?)", $values['id']);
        if(is_numeric($values['id_zona']))
            $select->where("{$this->_name}.id_zona= ?", $values['id_zona'],INTEGER);
        if(is_numeric($values['id_proyecto']))
            $select->where("{$this->_name}.id_proyecto= ?", $values['id_proyecto'],INTEGER);
        if(is_numeric($values['id_sala']))
            $select->where("{$this->_name}.id_sala= ?", $values['id_sala'],INTEGER);    
            
        if(is_numeric($values['tipo']))
            $select->where("{$this->_name}.tipo= ?", $values['tipo'],INTEGER);
      
        if(is_numeric($values['activo']))
            $select->where("{$this->_name}.activo= ?", $values['activo'],INTEGER);
      
      
        $rows = $this->getAdapter()->fetchAll($select);
        
        

        $modelo=new Sgit_Form_Element_Select_Xml('ContadorModelo');
        $tipo=new Sgit_Form_Element_Select_Xml('ContadorTipo');
        
        foreach($rows as $k => $v ) $id_contadores[]=$v['id'];
        
        
        
        
        if(is_array($id_contadores))
        {
            $m_lecturas=new Application_Model_Lecturas();
            $consumo=$m_lecturas->getConsumo($id_contadores,null,null,1);
            $m_circuitos=new Application_Model_Circuitos();
            $circuitos=$m_circuitos->getCircuitosByContadores($id_contadores);//   $this->DB->getRow("SELECT cuadros.cuadro,circuitos.circuito FROM circuitos LEFT JOIN cuadros ON cuadros.id=circuitos.id_cuadro WHERE id_contador=".$v['id']);
        }
        


  		foreach($rows as $k => $v )
        {
            $rows[$k]['tipo_text']=$tipo->getMultiOption($v['tipo']);
            $rows[$k]['activo_text']=$v['activo'] ? 'SI' :'NO';
            $rows[$k]['consumo']=$consumo[$v['id']];
            $rows[$k]['potencia']=$rows[$k]['consumo']['potencia'];
            $rows[$k]['potencia_anterior']=$rows[$k]['consumo']['potencia_anterior'];
            $rows[$k]['proyecto']=Sgit_Cache::single()->model('Proyectos')->getKey($v['id_proyecto']);
            $rows[$k]['row_circuito']=$circuitos[$v['id']];
            $rows[$k]['cuadro']=$circuitos[$v['id']]['cuadro'];
            $rows[$k]['id_cuadro']=$circuitos[$v['id']]['id_cuadro'];
            $rows[$k]['circuito']=$circuitos[$v['id']]['circuito'];
            $rows[$k]['id_circuito']=$circuitos[$v['id']]['id'];
        }


        if (is_numeric($values['id']))
            return $rows[0];
        else
            return $rows;

    }




    
    /**
     * Application_Model_Contadores::GetNextContador()
     * 21000 posibles contadores
     * @return
     */
    public function GetNextContador($id_zona){
        
        $select=$this->getAdapter()->select();
        $select->from(array('contadores'),  array('codigo'))
            ->where('id_zona = ?', $id_zona)
            ->order("codigo DESC")
            ->limit(1);
            

        $codigo = $this->getAdapter()->fetchOne($select);
        
        if(empty($codigo)) return 'A001';

        $letras=array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T','U','V','W','Y','Z');
 
        $letra=Zend_Filter::filterStatic($codigo, 'Alpha');
        $digito=(int)Zend_Filter::filterStatic($codigo, 'Digits');
        
        
        if($digito==999){
            $digito=1;
            $index_letra=array_search($letra,$letras);
            $letra=$letras[$index_letra+1];
            if($index_letra >= count($letras)-1){
               //si pasamos la Z
            }
        }
        else {
            $digito++;
        }

        $num=$letra.str_pad($digito, 3, "0", STR_PAD_LEFT);

        return $num;
    }
    
    
    
   public function getLectura($id,$mes,$anio)
   {
        
   }
   
    
   public function getConsumo($id,$mes,$anio)
   {
        
   }
    
    function getContadoresDetalleFacturacion($values)
    {
        
        $fecha=new Zend_Date();
        $fecha->setDay(1)->set($values['mes'],Zend_Date::MONTH)->set($values['anio'],Zend_Date::YEAR)->sub(1,Zend_Date::MONTH);
        
        
        $subselect1 = $this->getAdapter()->select()
            ->from('lecturas', array('cantidad'))
            ->where('id_con = c.id')
            ->where("mes = ? ",$fecha->get(Zend_Date::MONTH_SHORT))
            ->where("anio = ? ",$fecha->get(Zend_Date::YEAR));

        $fecha->sub(1,Zend_Date::MONTH);

        $subselect2 = $this->getAdapter()->select()
            ->from('lecturas', array('cantidad'))
            ->where('id_con = c.id')
            ->where("mes = ? ",$fecha->get(Zend_Date::MONTH_SHORT))
            ->where("anio = ? ",$fecha->get(Zend_Date::YEAR));
            
        $select = $this->getAdapter()->select()
            ->from(array('c' => $this->_name),array('id','con_numero','con_name','lectura_actual'=>"($subselect1)",'lectura_anterior'=>"($subselect2)"))
            ->where('c.activo = 1')
            ->where('c.id_proyecto = ?',$values['id_proyecto'])
            ->order('con_numero');

        $rows = $this->getAdapter()->fetchAll($select);
        foreach($rows as &$v){
            $v['consumo']= $v['lectura_actual']- $v['lectura_anterior'];
        }
        return $rows;


    }
    
    
    function getCCByProyecto($id_proyecto)
    {
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name),array(''));
        $select->joinLeft('centros_continuidad', 'centros_continuidad.id = contadores.id_cc', array('nombre'));
        $select->group('id_cc');
        $select->where('contadores.id_proyecto = ?',$id_proyecto);
       
        $rows = $this->getAdapter()->fetchCol($select);
        $rows=array_filter ($rows);
        return $rows;
    }
    
    function getCCByProyectosZona($id_zona)
    {
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name),array('id_proyecto'));
        $select->joinLeft('centros_continuidad', 'centros_continuidad.id = contadores.id_cc', array('nombre'));
        $select->group(array('id_proyecto','id_cc'));
        $select->where('centros_continuidad.id_zona = ?',$id_zona);
       
       
      
        $rows = $this->getAdapter()->fetchAll($select);
        foreach($rows as $v){
            if(is_numeric($v['id_proyecto']))
                $filas[$v['id_proyecto']][]=$v['nombre'];
        }

        return $filas;
    }
    
    
    
    
    function getContadoresLeidos($id_proyecto,$fecha)
    {
        
       	$fecha_alta=new Zend_Date($fecha);

        $f_alta=$fecha_alta->toString('yyyy-MM-ddd');
        

        $select = $this->getAdapter()->select();
        $select->from(array($this->_name),array('id'));
        $select->where('contadores.id_proyecto = ?',$id_proyecto,INTEGER);
        $select->where('contadores.activo = ?',1);
      //  $select->where("f_alta <= '$f_alta' OR f_alta IS NULL");
        
        
        $contadores = $this->getAdapter()->fetchCol($select);
        
        if($contadores){
            $select1 = $this->getAdapter()->select();
            $select1->from(array('lecturas'),array(new Zend_Db_Expr('count(*)')));
            $select1->where('lecturas.mes = ?',$fecha->get(Zend_Date::MONTH_SHORT),INTEGER);
            $select1->where('lecturas.anio = ?',$fecha->get(Zend_Date::YEAR),INTEGER);
            $select1->where('lecturas.id_con IN(?)',$contadores);
            
            $lecturas = $this->getAdapter()->fetchOne($select1);
        }else{
            $lecturas=0;
        }
         



        $contadores['contadores']=count($contadores);
        $contadores['leidos']=$lecturas;
        return $contadores;
    
    }
    
}  




